﻿using BLLTarasca;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using Tarasca.Models;

namespace Tarasca.Controllers
{
    [Authorize]
    public class CategoriasController : BaseController
    {
        public ActionResult Index(int idCuenta)
        {
            CategoriasModel model = new CategoriasModel();
            
            if(new BLLCuenta().Pertenece(User.Identity.Name, idCuenta))
            {
                model.Categorias = new BLLCategoria().TraerCategorias(idCuenta);
                model.IdCuenta = idCuenta;
            }

            return PartialView("_GrillaCategorias", model);
        }

        public void EliminarCategoria(int idCategoria)
        {
            BLLCategoria bllCategoria = new BLLCategoria();

            if(bllCategoria.Pertenece(User.Identity.Name, idCategoria))
            {
                bllCategoria.EliminarCategoria(idCategoria);
                bllCategoria.GuardarCambios();
            }
        }

        public ActionResult Nueva(int idCuenta)
        {
            EditarCategoriaModel model = new EditarCategoriaModel();
            model.IdCuenta = idCuenta;
            model.Color = "rgb(4, 87, 139)";

            return PartialView("_EditarCategoria", model);
        }

        public ActionResult Editar(int idCategoria)
        {
            BLLCategoria bllCategoria = new BLLCategoria();
            TA_Categoria categoria = bllCategoria.Traer(idCategoria);
            EditarCategoriaModel model = new EditarCategoriaModel();

            if(bllCategoria.Pertenece(User.Identity.Name, idCategoria))
            {
                model.Color = categoria.Color;
                model.IdCategoria = idCategoria;
                model.IdCuenta = categoria.IdCuenta.Value;
                model.Nombre = categoria.Nombre;
            }
            
            return PartialView("_EditarCategoria", model);
        }

        public void Eliminar(int idCategoria)
        {
            BLLCategoria bllCategoria = new BLLCategoria();

            if (bllCategoria.Pertenece(User.Identity.Name, idCategoria))
            {
                bllCategoria.EliminarCategoria(idCategoria);
                bllCategoria.GuardarCambios();
            }
        }

        public void Guardar(EditarCategoriaModel model)
        {
            BLLCategoria bllCategoria = new BLLCategoria();
            BLLCuenta bllCuenta = new BLLCuenta(bllCategoria.Contexto);
            TA_Categoria categoria = null;

            if (model.IdCategoria == 0)
            {
                if (!bllCuenta.Pertenece(User.Identity.Name, model.IdCuenta))
                    return;

                categoria = new TA_Categoria();
            }
            else
            {
                if (!bllCategoria.Pertenece(User.Identity.Name, model.IdCategoria))
                    return;

                categoria = bllCategoria.Traer(model.IdCategoria);
            }
            
            categoria.Nombre = model.Nombre;
            categoria.Color = model.Color;
            categoria.TA_Cuenta = bllCuenta.TraerCuenta(model.IdCuenta);

            if (model.IdCategoria == 0)
                bllCategoria.AgregarCategoria(categoria);

            bllCategoria.GuardarCambios();
        }

        public ActionResult MostrarCombo(int idCuenta)
        {
            CategoriasComboModel model = new CategoriasComboModel();

            if(new BLLCuenta().Pertenece(User.Identity.Name, idCuenta))
                model.Categorias = new BLLCategoria().TraerCategorias(idCuenta);

            return PartialView("_ComboCategorias", model);
        }
    }
}
